//
//  ILLinkErrorModel.h
//  IMILabKit
//
//  Created by OrrHsiao on 2022/6/17.
//

#import <Foundation/Foundation.h>


#if __has_include(<IMILabSDK_BindCommon/IMILabSDK_BindCommon.h>)
#import <IMILabSDK_BindCommon/ILBindDefine.h>
#import <IMILabSDK_BindCommon/ILBindDeviceModel.h>

#else
#import "ILBindDeviceModel.h"
#import "ILBindDefine.h"

#endif

typedef NS_ENUM(NSInteger, ILLinkSubError) {
    /// 默认子错误码
    ILLinkSubError_Default = 0,
    /// 未发现指定设备
    ILLinkSubError_Device_Not_Found = -1,
    /// 发现设备超时
    ILLinkSubError_Found_Timeout = -2,
    /// 连接失败
    ILLinkSubError_Connect_Faild = -3,
    /// 连接超时
    ILLinkSubError_Connect_Timeout = -4,
    /// 待发送数据初始化失败
    ILLinkSubError_Data_Init_Faild = -5,
    /// tcp创建失败
    ILLinkSubError_Tcp_Creat_Faild = -6,
    /// tcp发送失败
    ILLinkSubError_Tcp_Send_Faild = -7,
    /// udp创建失败
    ILLinkSubError_Udp_Creat_Faild = -8,
    /// udp发送失败
    ILLinkSubError_Udp_Send_Faild = -9,
    /// 发送数据超时
    ILLinkSubError_Send_TimeOut = -10,
};


NS_ASSUME_NONNULL_BEGIN

@interface ILLinkErrorModel : NSObject

/// 当前绑定类型
@property(nonatomic)ILLinkType linkType;

/// 状态信息，只作为调试信息提示，内部不做国际化处理
@property(nonatomic, assign)ILBindError code;

///绑定二级子码，如:包含配网错误以及网络请求错误的详细错误码
@property(nonatomic)NSInteger subCode;

/// 状态信息，只作为调试信息提示，没有做国际化处理
@property(nonatomic, copy)NSString *message;

/// 建议，只作为调试信息提示，没有做国际化处理
@property(nonatomic, copy)NSString *suggest;

/// 该错误是否可以重试,如果可以,可以调用重试接口
@property(nonatomic, assign)BOOL canRetry;

/// 更新对象属性
/// @param code 状态信息
/// @param subCode 绑定二级子码，如:包含配网错误以及网络请求错误的详细错误码
/// @param canRetry 是否可以重试
- (void)updateLinkError:(ILBindError)code subCode:(NSInteger)subCode canRetry:(BOOL)canRetry;

/// 更新对象属性
/// @param code 状态信息
/// @param subCode 绑定二级子码，如:包含配网错误以及网络请求错误的详细错误码
/// @param message 错误描述
/// @param suggest 建议
/// @param canRetry 是否可以重试
- (void)updateLinkError:(ILBindError)code subCode:(NSInteger)subCode message:(nullable NSString *)message suggest:(nullable NSString *)suggest canRetry:(BOOL)canRetry;

@end

NS_ASSUME_NONNULL_END
